/**
 * Вспомогательный класс для преобразования строк в вид, используемый
 * XML-библиотекой Xerces C
 */

#ifndef _XMLSTRINGTRANSCODER_H
#define	_XMLSTRINGTRANSCODER_H

#include <sstream>
#include <string>
#include <xercesc/util/XMLString.hpp>

namespace etu {
namespace common {

XERCES_CPP_NAMESPACE_USE

class XmlStringTranscoder {
    XMLCh* unicodeStr;

public :
    XmlStringTranscoder(const char* native) {
        unicodeStr = XMLString::transcode(native);
    }

    XmlStringTranscoder(const std::string& native) {
        unicodeStr = XMLString::transcode(native.c_str());
    }

    XmlStringTranscoder(const int& value) {
        std::ostringstream ss;
        ss << value;
        unicodeStr =  XMLString::transcode(ss.str().c_str());
    }

    XmlStringTranscoder(const long& value) {
        std::ostringstream ss;
        ss << value;
        unicodeStr =  XMLString::transcode(ss.str().c_str());
    }

    ~XmlStringTranscoder() {
        XMLString::release(&unicodeStr);
    }

    const XMLCh* unicodeForm() const {
        return unicodeStr;
    }
};

}
}

#define X(str) etu::common::XmlStringTranscoder(str).unicodeForm()

#endif	/* _XMLSTRINGTRANSCODER_H */

